package io;

import java.io.*;

/**
 * 缓冲流
 * 缓冲流是一对高级流，作用是加快读写效率
 * 1）BufferedInputStream 缓冲输入流
 * 2)BufferedOutputStream 缓冲输出流
 * 缓冲流读写快的原因：
 * 1）缓冲流内部有一个8KB的字节数组，看着是一个字节一个字节的读写，
 * 但缓冲流底部已经把它转换为块读写了
 * 缓冲流何时用才有意义:
 * 1)不同的高级流有不同的功能，但只有缓冲流才具有加速功能(块读写)，
 * 其它的高级流不具备加速功能，都是单字节读写，
 * 此时若又想先完成功能再加速处理，则需要流连接，将功能流连到缓冲流上
 */
public class CopyDemo3Buffered {
    public static void main(String[] args) throws IOException {
       /* FileInputStream fis = new FileInputStream("t01043eec7c54708f40.jpg");
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream("t01043eec7c54708f40_cp.jpg");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        long start = System.currentTimeMillis();
        //单字节读取
        int d;
        while ((d = bis.read())!=-1 ){//使用缓冲流读取字节
            bos.write(d);//使用缓冲流写出字节
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完成，耗时"+(end-start)+"ms");
        bis.close();//只需关闭高级流，因为高级流中先关了低级流
        bos.close();*/
        FileInputStream fis = new FileInputStream("t01043eec7c54708f40.jpg");
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream("t01043eec7c54708f40_cp2.jpg");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        long start = System.currentTimeMillis();
        int d;
        while ((d = bis.read()) != -1) {
            bos.write(d);
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完成，耗时" + (end - start) + "ms");
        bis.close();
        bos.close();
    }
}
